﻿using System;
using System.Collections.Generic;
using System.Data.Linq;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Systemet.Domain;
using System.Data.SqlClient;

namespace Systemet.Technical
{
    class RapportConnection
    {
        private LinqToSQLDataContext database;
        private bool successfull;
        private string pass = AccessController.Instance.Connection;

        //Rapport för Budgeterade kunder per produkt
        public List<Kund> RetrieveCustomersperProduct(string prodID)
        {
            pass = AccessController.Instance.Connection;
            database = new LinqToSQLDataContext(pass);

            var customerProducts = from Intäktsbudget in database.Intäktsbudgetregisters
                                   join Kund in database.Kundregisters on Intäktsbudget.kundID equals Kund.kundID
                                   join Produkt in database.Produktregisters on Intäktsbudget.produktID equals Produkt.produktID
                                   where Produkt.produktID == prodID
                                   group Kund by new { Kund.kundID, Kund.kundNamn, Kund.kundkategori, Kund.kontaktFnamn, Kund.kontaktEnamn, Kund.telefonnummer, Kund.email } into knd
                                   select new { knd.Key.kundID, knd.Key.kundNamn, knd.Key.kundkategori, knd.Key.kontaktFnamn, knd.Key.kontaktEnamn, knd.Key.telefonnummer, knd.Key.email };

            List<Kund> CustomerList = customerProducts.AsEnumerable()
                                            .Select(k => new Kund
                                            {
                                                KundID = k.kundID,
                                                KundNamn = k.kundNamn,
                                                Kundkategori = k.kundkategori,
                                                Fname = k.kontaktFnamn,
                                                Ename = k.kontaktEnamn,
                                                Telefonnummer = k.telefonnummer,
                                                Email = k.email

                                            }).ToList();
            return CustomerList;

        }
        //Hämta alla kunder som inte blivit budgeterade
        public List<Kund> RetrieveUnBudgetedCustomers()
        {
            pass = AccessController.Instance.Connection;
            database = new LinqToSQLDataContext(pass);

            var customers = from Kundregister in database.Kundregisters
                            select Kundregister;
            var budgets = from Intäktsbudget in database.Intäktsbudgetregisters
                          select Intäktsbudget;

            var CustomerNotOnBudget = (from k in customers
                                       where !(from b in budgets
                                               select b.kundID).Contains(k.kundID)
                                       group k by new { k.kundID, k.kundNamn, k.kundkategori, k.kontaktFnamn, k.kontaktEnamn, k.telefonnummer, k.email } into knd
                                       select new
                                       {
                                           knd.Key.kundID,
                                           knd.Key.kundNamn,
                                           knd.Key.kundkategori,
                                           knd.Key.kontaktFnamn,
                                           knd.Key.kontaktEnamn,
                                           knd.Key.telefonnummer,
                                           knd.Key.email
                                       }).ToList();

            List<Kund> CustomerList = CustomerNotOnBudget.AsEnumerable()
                                            .Select(k => new Kund
                                            {
                                                KundID = k.kundID,
                                                KundNamn = k.kundNamn,
                                                Kundkategori = k.kundkategori,
                                                Fname = k.kontaktFnamn,
                                                Ename = k.kontaktEnamn,
                                                Telefonnummer = k.telefonnummer,
                                                Email = k.email
                                            }).ToList();

            //List<Kundregister> CustomerList = CustomerNotOnBudget.AsEnumerable()
            //                                .Select(k => new Kundregister
            //                                {
            //                                    kundID = k.kundID,
            //                                    kundNamn = k.kundNamn,
            //                                    kundkategori = k.kundkategori,
            //                                    kontaktFnamn = k.kontaktFnamn,
            //                                    kontaktEnamn = k.kontaktEnamn,
            //                                    telefonnummer = k.telefonnummer,
            //                                    email = k.email
            //                                }).ToList();
            return CustomerList;
        }

        public List<Produkt> NotBudgetedProducts()
        {
            pass = AccessController.Instance.Connection;
            database = new LinqToSQLDataContext(pass);

            var products = from Produkt in database.Produktregisters
                           select Produkt;
            var budgets = from Intäktsbudget in database.Intäktsbudgetregisters
                          select Intäktsbudget;

            var productsNotOnBudget = (from p in products
                                       where !(from b in budgets
                                               select b.produktID).Contains(p.produktID)
                                       group p by new { p.produktID, p.produkt, p.Produktgrupp.produktGruppNamn, p.Produktkategori.produktKategoriNamn, p.avdelningsnamn } into prdgrupp
                                       select new
                                       {
                                           prdgrupp.Key.produktID,
                                           prdgrupp.Key.produkt,
                                           prdgrupp.Key.produktGruppNamn,
                                           prdgrupp.Key.produktKategoriNamn,
                                           prdgrupp.Key.avdelningsnamn
                                       }).ToList();

            List<Produkt> productList = productsNotOnBudget.AsEnumerable()
                                            .Select(p => new Produkt
                                            {
                                                ProduktID = p.produktID,
                                                ProduktNamn = p.produkt,
                                                ProduktGrupp = p.produktGruppNamn,
                                                ProduktKategori = p.produktKategoriNamn,
                                                Produktionsomrade = p.avdelningsnamn

                                            }).ToList();
            return productList;

        }

        //Intäktsrapport (Budget per kund)
        public List<Intäktsbudget> RapportBudgetperkund(string kundid, string produkt, string prodGrupp, string prodkategori, string produktionsOmrade)
        {
            try
            {
                database = new LinqToSQLDataContext(pass);

                var budgets = from Intäktsbudgetregister in database.Intäktsbudgetregisters
                              join Produkt in database.Produktregisters on Intäktsbudgetregister.produktID equals Produkt.produktID
                              join Produktgrupp in database.Produktgrupps on Produkt.Produktgrupp.produktGruppNamn equals Produktgrupp.produktGruppNamn
                              where Intäktsbudgetregister.kundID == kundid && Produkt.produkt.Contains(produkt) && Produktgrupp.produktGruppNamn.Contains(prodGrupp)
                              && Produkt.Produktkategori.produktKategoriNamn.Contains(prodkategori) && Produkt.avdelningsnamn.Contains(produktionsOmrade)
                              select Intäktsbudgetregister;

                List<Intäktsbudget> intaktsBudgets = new List<Intäktsbudget>();
                foreach (Intäktsbudgetregister iB in budgets)
                {
                    Intäktsbudget nyIB = new Intäktsbudget();
                    nyIB.IntäktsbudgetID = iB.intBudID;
                    nyIB.ProdID = iB.produktID;
                    nyIB.ProduktNamn = iB.Produktregister.produkt;
                    nyIB.Avtal = iB.avtal;
                    nyIB.GradAvtal = iB.gradA;
                    nyIB.Tillägg = iB.tillagg;
                    nyIB.GradTillägg = iB.gradT;
                    nyIB.Kommentar = iB.kommentar;
                    nyIB.KundID = iB.kundID;
                    nyIB.Timmar = iB.tim;
                    nyIB.Låst = iB.låst;
                    nyIB.Datum = iB.andratDatum;
                    nyIB.Signatur = iB.signatur;
                    intaktsBudgets.Add(nyIB);
                }

                return intaktsBudgets.ToList();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
                return null;
            }

        }

        //Intäktsrapport budget per kund och produkt
        public List<Intäktsbudget> RapportBudgPKundProdukt(string kundid, string prodID, string prodnamn)
        {
            try
            {
                database = new LinqToSQLDataContext(pass);

                //var budgets = from Intäktsbudgetregister in database.Intäktsbudgetregisters
                IEnumerable<Intäktsbudgetregister> budgets = from Intäktsbudgetregister in database.Intäktsbudgetregisters
                                                             join Produkt in database.Produktregisters on Intäktsbudgetregister.produktID equals Produkt.produktID
                                                             join Produktgrupp in database.Produktgrupps on Produkt.Produktgrupp.produktGruppNamn equals Produktgrupp.produktGruppNamn
                                                             where Intäktsbudgetregister.kundID == kundid && Produkt.produktID == prodID && Produkt.produkt == prodnamn
                                                             select Intäktsbudgetregister;

                List<Intäktsbudget> intaktsBudgets = new List<Intäktsbudget>();

                foreach (Intäktsbudgetregister iB in budgets)
                {
                    Intäktsbudget nyIB = new Intäktsbudget();
                    nyIB.IntäktsbudgetID = iB.intBudID;
                    nyIB.ProdID = iB.produktID;
                    nyIB.ProduktNamn = iB.Produktregister.produkt;
                    nyIB.Avtal = iB.avtal;
                    nyIB.GradAvtal = iB.gradA;
                    nyIB.Tillägg = iB.tillagg;
                    nyIB.GradTillägg = iB.gradT;
                    nyIB.Kommentar = iB.kommentar;
                    nyIB.KundID = iB.kundID;
                    nyIB.Timmar = iB.tim;
                    nyIB.Låst = iB.låst;
                    nyIB.Datum = iB.andratDatum;
                    nyIB.Signatur = iB.signatur;

                    intaktsBudgets.Add(nyIB);
                }

                //return intaktsBudgets.ToList();
                return intaktsBudgets;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
                return null;
            }

        }

        //IntäktsRapport Budget per produkt
        public List<Intäktsbudget> RapportBudgetedProducts(string produktID)
        {
            try
            {
                database = new LinqToSQLDataContext(pass);


                var budgets = from Intäktsbudget in database.Intäktsbudgetregisters
                              join Produkt in database.Produktregisters on Intäktsbudget.produktID equals Produkt.produktID
                              where Intäktsbudget.produktID == produktID
                              select Intäktsbudget;

                List<Intäktsbudget> intaktsBudgets = new List<Intäktsbudget>();

                foreach (Intäktsbudgetregister iB in budgets)
                {
                    Intäktsbudget nyIB = new Intäktsbudget();

                    nyIB.IntäktsbudgetID = iB.intBudID;
                    nyIB.ProdID = iB.produktID;
                    nyIB.ProduktNamn = iB.Produktregister.produkt;
                    nyIB.Avtal = iB.avtal;
                    nyIB.GradAvtal = iB.gradA;
                    nyIB.Tillägg = iB.tillagg;
                    nyIB.GradTillägg = iB.gradT;
                    nyIB.Kommentar = iB.kommentar;
                    nyIB.KundID = iB.kundID;
                    nyIB.KundNamn = iB.Kundregister.kundNamn;
                    nyIB.Timmar = iB.tim;
                    nyIB.Låst = iB.låst;
                    nyIB.Datum = iB.andratDatum;
                    nyIB.Signatur = iB.signatur;

                    intaktsBudgets.Add(nyIB);
                }

                return intaktsBudgets;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
                return null;
            }

        }

        public List<Intäktsbudgetregister> kontrolleraGradAndLockedIntäktsbudget()
        {
            try
            {
                database = new LinqToSQLDataContext(pass);

                IEnumerable<Intäktsbudgetregister> intaktsbudget = from Intäktsbudgetregisters in database.Intäktsbudgetregisters
                                                                   where (Intäktsbudgetregisters.gradA == "Osäker" || Intäktsbudgetregisters.gradT == "Osäker") &&
                                                                   Intäktsbudgetregisters.låst == false && Intäktsbudgetregisters.avserÅr.Value.Year == DateTime.Now.Year + 1
                                                                   select Intäktsbudgetregisters;

                //foreach (Intäktsbudgetregister iB in intaktsbudget)
                //{
                //    Intäktsbudgetregister newIB = new Intäktsbudgetregister();
                //    newIB.intBudID = iB.intBudID;
                //    newIB.Signatur = iB.signatur.TrimEnd();
                //    newIB.KundID = iB.kundID.TrimEnd();
                //    newIB.ProdID = iB.produktID.TrimEnd();
                //    listOfUnsecure.Add(newIB);
                //}

                database.Connection.Close();

                return intaktsbudget.ToList();
            }
            catch (SqlException se)
            {
                List<Intäktsbudgetregister> failList = new List<Intäktsbudgetregister>();
                Intäktsbudgetregister newIB = new Intäktsbudgetregister();
                newIB.kommentar = "SQL-fel, kontrollera uppkoppling. Felmeddelande: " + "\n" + "\n" + se.ToString();
                failList.Add(newIB);
                return failList;
            }
        }

        public bool lockIntäktsBudgets()
        {
            database = new LinqToSQLDataContext(pass);

            var budgetsToUpdate = from Intäktsbudgetregisters in database.Intäktsbudgetregisters
                                  where Intäktsbudgetregisters.låst == false && Intäktsbudgetregisters.avserÅr.Value.Year == DateTime.Now.Year + 1
                                  select Intäktsbudgetregisters;

            foreach (Intäktsbudgetregister Intäktsbudgetregisters in budgetsToUpdate)
            {
                Intäktsbudgetregisters.låst = true;
                Intäktsbudgetregisters.andratDatum = DateTime.Now;
                Intäktsbudgetregisters.signatur = AccessController.Instance.LoggedInUser.UserName;
            }

            try
            {
                database.SubmitChanges();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
            finally
            {
                database.Connection.Close();
            }

            return true;
        }

        public bool lockKostnadsBudgets()
        {
            database = new LinqToSQLDataContext(pass);

            var prodAlloLock = from Produktallokering in database.Produktallokerings
                               where Produktallokering.låst == false && Produktallokering.ändratDatum.Value.Year == DateTime.Now.Year
                               select Produktallokering;

            foreach (Produktallokering a in prodAlloLock)
            {
                a.låst = true;
                a.ändratDatum = DateTime.Now;
            }

            var aktivitetAlloLock = from Aktivitetsallokering in database.Aktivitetsallokerings
                                    where Aktivitetsallokering.låst == false && Aktivitetsallokering.ändratDatum.Value.Year == DateTime.Now.Year
                                    select Aktivitetsallokering;

            foreach (Aktivitetsallokering a in aktivitetAlloLock)
            {
                a.låst = true;
                a.ändratDatum = DateTime.Now;
            }

            var kostKontoLock = from Kostnadskontoregister in database.Kostnadskontoregisters
                                where Kostnadskontoregister.låst == false && Kostnadskontoregister.ändratDatum.Value.Year == DateTime.Now.Year && Kostnadskontoregister.kontonummer != "9999"
                                select Kostnadskontoregister;

            foreach (Kostnadskontoregister a in kostKontoLock)
            {
                a.låst = true;
                a.ändratDatum = DateTime.Now;
            }

            var prodKostLock = from Produktkostnad in database.Produktkostnads
                               where Produktkostnad.låst == false && Produktkostnad.ändratDatum.Value.Year == DateTime.Now.Year
                               select Produktkostnad;

            foreach (Produktkostnad a in prodKostLock)
            {
                a.låst = true;
                a.ändratDatum = DateTime.Now;
            }

            var aktivKostLock = from Aktivitetskostnad in database.Aktivitetskostnads
                                where Aktivitetskostnad.låst == false && Aktivitetskostnad.ändratDatum.Value.Year == DateTime.Now.Year
                                select Aktivitetskostnad;

            foreach (Aktivitetskostnad a in aktivKostLock)
            {
                a.låst = true;
                a.ändratDatum = DateTime.Now;
            }

            try
            {
                database.SubmitChanges();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
            finally
            {
                database.Connection.Close();
            }

            return true;
        }

        //Intäktsbudget Rapport Budget per produktgrupp
        public object BudgetedProductGroups(string prodgrupp)
        {
            pass = AccessController.Instance.Connection;
            database = new LinqToSQLDataContext(pass);
            var prodgrupper = from Intäktsbudgetregister in database.Intäktsbudgetregisters
                              join Produkt in database.Produktregisters on Intäktsbudgetregister.produktID equals Produkt.produktID
                              join Produktgrupp in database.Produktgrupps on Produkt.produktGruppID equals Produktgrupp.produktGruppID
                              where Produktgrupp.produktGruppNamn.Contains(prodgrupp)
                              group Intäktsbudgetregister by Produktgrupp.produktGruppNamn into groupings
                              orderby groupings.Key ascending
                              select new
                              {
                                  ProduktgruppNamn = groupings.Key,
                                  Avtal = groupings.Sum(g => g.avtal),
                                  Tillägg = groupings.Sum(t => t.tillagg),
                                  Timmar = groupings.Sum(ti => ti.tim),
                                  Budget = groupings.Sum(b => b.tillagg + b.avtal)
                              };

            return prodgrupper.ToList();

        }

        public List<Intäktsbudget> BudgetedProductGroupsReturnList(string prodgrupp)
        {
            pass = AccessController.Instance.Connection;
            database = new LinqToSQLDataContext(pass);
            var prodgrupper = from Intäktsbudgetregister in database.Intäktsbudgetregisters
                              join Produkt in database.Produktregisters on Intäktsbudgetregister.produktID equals Produkt.produktID
                              join Produktgrupp in database.Produktgrupps on Produkt.produktGruppID equals Produktgrupp.produktGruppID
                              where Produktgrupp.produktGruppID.Contains(prodgrupp)
                              group Intäktsbudgetregister by Produktgrupp.produktGruppID into groupings
                              orderby groupings.Key ascending
                              select new
                              {
                                  ProduktgruppNamn = groupings.Key,
                                  Avtal = groupings.Sum(g => g.avtal),
                                  Tillägg = groupings.Sum(t => t.tillagg),
                                  Timmar = groupings.Sum(ti => ti.tim),
                                  Budget = groupings.Sum(b => b.tillagg + b.avtal)
                              };

            List<Intäktsbudget> prodGruppList = prodgrupper.AsEnumerable()
                .Select(p => new Intäktsbudget
                {
                    ProduktGrupp = p.ProduktgruppNamn,
                    Avtal = p.Avtal,
                    Tillägg = p.Tillägg,
                    Timmar = p.Timmar
                }).ToList();

            return prodGruppList;

        }

        //Intäktsrapporter från alla produkter i hela företaget
        public List<Intäktsbudget> BudgetedProductCompanyReturnList()
        {
            database = new LinqToSQLDataContext(pass);
            var prodgrupper = from Intäktsbudgetregister in database.Intäktsbudgetregisters
                              select Intäktsbudgetregister;

            List<Intäktsbudget> prodGruppList = prodgrupper.AsEnumerable()
                .Select(p => new Intäktsbudget
                {
                    IntäktsbudgetID = p.intBudID,
                    Avtal = p.avtal,
                    Tillägg = p.tillagg,
                    ProdID = p.produktID
                }).ToList();

            return prodGruppList;
        }

        //Intäktsbudget Rapport Budget per produktionsområde
        public object BudgetedProductAreas(string avdelning)
        {
            pass = AccessController.Instance.Connection;
            database = new LinqToSQLDataContext(pass);
            var prodOmrade = from Intäktsbudgetregister in database.Intäktsbudgetregisters
                             join Produkt in database.Produktregisters on Intäktsbudgetregister.produktID equals Produkt.produktID
                             join Avdelning in database.Avdelningsregisters on Produkt.avdelningsnamn equals Avdelning.avdelningsnamn
                             where Avdelning.avdelningsnamn.Contains(avdelning)
                             group Intäktsbudgetregister by Avdelning.avdelningsnamn into grupp
                             orderby grupp.Key ascending
                             select new
                             {
                                 Produktionsområde = grupp.Key,
                                 Avtal = grupp.Sum(a => a.avtal),
                                 Tillägg = grupp.Sum(t => t.tillagg),
                                 Timmar = grupp.Sum(ti => ti.tim),
                                 Budget = grupp.Sum(b => b.tillagg + b.avtal)
                             };

            return prodOmrade.ToList();

        }

        //Intäktsbudget Rapport Budget per produkt inom produktionsområde
        public object BudgetedProductsPerAreas(string avdelning)
        {
            pass = AccessController.Instance.Connection;
            database = new LinqToSQLDataContext(pass);
            var prodOmrade = from Intäktsbudgetregister in database.Intäktsbudgetregisters
                             join Produkt in database.Produktregisters on Intäktsbudgetregister.produktID equals Produkt.produktID
                             join Avdelning in database.Avdelningsregisters on Produkt.avdelningsnamn equals Avdelning.avdelningsnamn
                             where Avdelning.avdelningsnamn == avdelning
                             group Intäktsbudgetregister by new { Produkt.produktID, Intäktsbudgetregister.Produktregister.produkt } into grupp
                             select new
                             {
                                 ProduktID = grupp.Key.produktID,
                                 Produktnamn = grupp.Key.produkt,
                                 Avtal = grupp.Sum(a => a.avtal),
                                 Tillägg = grupp.Sum(t => t.tillagg),
                                 Timmar = grupp.Sum(ti => ti.tim),
                                 Budget = grupp.Sum(b => b.tillagg + b.avtal)
                             };

            return prodOmrade.ToList();

        }

        //Intäktsbudget rapport Budget per kundkategori
        public object BudgetedCustCategory(string kundkategori)
        {
            pass = AccessController.Instance.Connection;
            database = new LinqToSQLDataContext(pass);
            var prodOmrade = from Intäktsbudgetregister in database.Intäktsbudgetregisters
                             join Kund in database.Kundregisters on Intäktsbudgetregister.kundID equals Kund.kundID
                             where Kund.kundkategori == kundkategori
                             group Intäktsbudgetregister by Kund.kundkategori into grupp
                             select new
                             {
                                 Kundkategori = grupp.Key,
                                 Avtal = grupp.Sum(a => a.avtal),
                                 Tillägg = grupp.Sum(t => t.tillagg),
                                 Timmar = grupp.Sum(ti => ti.tim),
                                 Budget = grupp.Sum(b => b.tillagg + b.avtal)
                             };

            return prodOmrade.ToList();

        }

        //Intäktsbudget rapport Budget per produktkategori
        public object BudgetedProductCategories(string prodKategori)
        {
            pass = AccessController.Instance.Connection;
            database = new LinqToSQLDataContext(pass);
            var prodOmrade = from Intäktsbudgetregister in database.Intäktsbudgetregisters
                             join Produkt in database.Produktregisters on Intäktsbudgetregister.produktID equals Produkt.produktID
                             where Produkt.Produktkategori.produktKategoriNamn == prodKategori
                             group Intäktsbudgetregister by Produkt.Produktkategori.produktKategoriNamn into grupp
                             select new
                             {
                                 Produktkategori = grupp.Key,
                                 Avtal = grupp.Sum(a => a.avtal),
                                 Tillägg = grupp.Sum(t => t.tillagg),
                                 Timmar = grupp.Sum(ti => ti.tim),
                                 Budget = grupp.Sum(b => b.tillagg + b.avtal)
                             };

            return prodOmrade.ToList();

        }
        //Intäktsbudgetrapport budget per kund fallande
        public object BudgetedCustFalling()
        {
            pass = AccessController.Instance.Connection;
            database = new LinqToSQLDataContext(pass);
            var prodOmrade = from Intäktsbudgetregister in database.Intäktsbudgetregisters
                             join Kund in database.Kundregisters on Intäktsbudgetregister.kundID equals Kund.kundID
                             group Intäktsbudgetregister by new { Kund.kundID, Kund.kundNamn } into grupp
                             orderby grupp.Key.kundNamn ascending
                             select new
                             {
                                 KundID = grupp.Key.kundID,
                                 Kundnamn = grupp.Key.kundNamn,
                                 Avtal = grupp.Sum(a => a.avtal),
                                 Tillägg = grupp.Sum(t => t.tillagg),
                                 Timmar = grupp.Sum(ti => ti.tim),
                                 Budget = grupp.Sum(b => b.tillagg + b.avtal)
                             };

            return prodOmrade.ToList();

        }


        //Intäktsbudgetrapport budget per produkt fallande
        public object BudgetedProductsFalling()
        {
            pass = AccessController.Instance.Connection;
            database = new LinqToSQLDataContext(pass);
            var prodOmrade = from Intäktsbudgetregister in database.Intäktsbudgetregisters
                             join Produkt in database.Produktregisters on Intäktsbudgetregister.produktID equals Produkt.produktID
                             group Intäktsbudgetregister by new { Produkt.produktID, Produkt.produkt } into grupp
                             orderby grupp.Key.produkt ascending
                             select new
                             {
                                 ProduktID = grupp.Key.produktID,
                                 Produktnamn = grupp.Key.produkt,
                                 Avtal = grupp.Sum(a => a.avtal),
                                 Tillägg = grupp.Sum(t => t.tillagg),
                                 Timmar = grupp.Sum(ti => ti.tim),
                                 Budget = grupp.Sum(b => b.tillagg + b.avtal)
                             };

            return prodOmrade.ToList();

        }

        //Intäktsbudget rapport Totalt
        public object BudgetedTotals()
        {
            pass = AccessController.Instance.Connection;
            database = new LinqToSQLDataContext(pass);

            var q = from Intäktsbudgetregister in database.Intäktsbudgetregisters
                    group Intäktsbudgetregister by 1 into g
                    select new
                    {
                        Avtal = g.Sum(x => x.avtal),
                        Tillägg = g.Sum(x => x.tillagg),
                        Timmar = g.Sum(x => x.tim),
                        Budget = g.Sum(x => x.tillagg + x.avtal)
                    };


            return q.ToList();
        }

        public List<Intäktsbudget> GetProduktOnPersonalAvdelning(string avdelningsID)
        {
            database = new LinqToSQLDataContext(pass);

            List<Intäktsbudget> listOfIntäktsbudgetAvdelning = new List<Intäktsbudget>();

            var q = from Intäktsbudgetregister in database.Intäktsbudgetregisters
                    join Produktregister in database.Produktregisters on Intäktsbudgetregister.produktID equals Produktregister.produktID
                    where Produktregister.avdelningsnamn == avdelningsID
                    select Intäktsbudgetregister;

            foreach (Intäktsbudgetregister ir in q)
            {
                Intäktsbudget ib = new Intäktsbudget();

                ib.IntäktsbudgetID = ir.intBudID;
                ib.Avtal = ir.avtal;
                ib.Tillägg = ir.tillagg;
                ib.ProduktNamn = ir.produktID;

                listOfIntäktsbudgetAvdelning.Add(ib);
            }

            return listOfIntäktsbudgetAvdelning;
        }
    }
}
